i386: fix boot
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 13 Jul 2009 10:18:57 +0000 (11:18 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 13 Jul 2009 10:18:57 +0000 (11:18 +0100)
Since the Xen heap pages (which are the only ones mapped at this
point) don't get passed to init_boot_pages(), it has no place to store
the bootmem regions without faulting. Hence, a mapped page must be
passed to that function as the very first thing.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen/arch/x86/setup.c

index b7966dfd630214eca87551436985c5f9564af5a1..07c11c9788c597b6c5769f927187e4df5d413f02 100644 (file)
@@ -763,7 +763,9 @@ void __init __start_xen(unsigned long mbi_p)
     reserve_e820_ram(&boot_e820, initial_images_base, initial_images_end);
 
 #if defined(CONFIG_X86_32)
-    xenheap_initial_phys_start = __pa(&_end);
+    xenheap_initial_phys_start = (PFN_UP(__pa(&_end)) + 1) << PAGE_SHIFT;
+    /* Must pass a single mapped page for populating bootmem_region_list. */
+    init_boot_pages(__pa(&_end), xenheap_initial_phys_start);
     xenheap_phys_end = DIRECTMAP_MBYTES << 20;
 #else
     if ( !xen_phys_start )